package language.advanced.generic;

import java.io.Serializable;
import java.util.List;

class Point<T, U> {// 此处可以随便写标识符号
    public T x;
    public U name;
}

class TypeLimitForClass<T extends List<String> & Serializable> {
}

interface Info<T>{        // 在接口上定义泛型，想让接口泛化使用
    public T getVar() ; // 定义抽象方法，抽象方法的返回值就是泛型类型    
    public void setVar(T x);
}

class InfoImpl implements Info<String>{   // 定义泛型接口的子类
    private String var ;                // 定义属性
    public InfoImpl(String var){        // 通过构造方法设置属性内容
        this.setVar(var) ;
    }
    @Override
    public void setVar(String var){
        this.var = var ;
    }
    @Override
    public String getVar(){
        return this.var ;
    }

    public static void main(String[] args) {
        InfoImpl i = new InfoImpl("harvic");
        System.out.println(i.getVar()) ;
    }
}

class InfoImpl2<T> implements Info<T>{   // 定义泛型接口的子类
    private T var ;             // 定义属性
    public InfoImpl2(T var){     // 通过构造方法设置属性内容
        this.setVar(var) ;
    }
    public void setVar(T var){
        this.var = var ;
    }
    public T getVar(){
        return this.var ;
    }

    public static void main(String arsg[]){
        InfoImpl2<String> i = new InfoImpl2<String>("harvic");
        System.out.println(i.getVar()) ;
    }
}